<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    function person(a, b, c, d) {
        console.log(this.name)
        console.log(a, b, c, d)
    }

    var egg = {name: 'jack'}

    Function.prototype.newCall = function (obj) {
        obj = obj || window
        obj.p = this
        var newArguments = []

        for (var i = 1; i < arguments.length; i++) {
            newArguments.push('arguments[' + i + ']')
        }
        eval('obj.p(' + newArguments + ')')
        delete obj.p
    }

    person.newCall(null, 'a', 'b', 'c', 'd')
    person.call(null, 'a', 'b', 'c', 'd')
</script>
</body>
</html>
